package com.example.user.adapter.in.web.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 用户信息DTO (Data Transfer Object)
 * 用于封装用户的基本信息，在不同层之间传输
 * 
 * DTO是数据传输对象，主要用于在不同层之间传输数据
 * 这里专门用于传输用户的基本信息，不包含敏感信息如密码
 * 
 * @Data Lombok注解，自动生成getter、setter、toString等方法
 * @Builder Lombok注解，提供Builder模式构建对象，使代码更清晰易读
 * @NoArgsConstructor Lombok注解，生成无参构造函数
 * @AllArgsConstructor Lombok注解，生成全参构造函数
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {

    /**
     * 用户ID
     * 
     * 数据库中的主键，唯一标识一个用户
     * 使用Long类型可以支持更大的数据量
     */
    private Long id;

    /**
     * 用户名
     * 
     * 用户登录时使用的名称，必须唯一
     * 通常用于登录认证
     */
    private String username;

    /**
     * 邮箱
     * 
     * 用户的电子邮箱地址
     * 可以用于找回密码、接收通知等
     */
    private String email;

    /**
     * 手机号
     * 
     * 用户的手机号码
     * 可以用于登录、找回密码、接收短信通知等
     */
    private String phone;

    /**
     * 真实姓名
     * 
     * 用户的真实姓名
     * 用于实名认证、显示用户真实身份等
     */
    private String realName;

    /**
     * 用户状态：0-禁用，1-启用
     * 
     * 用于控制用户账户是否可以正常使用
     * 0表示账户被禁用，无法登录
     * 1表示账户正常，可以登录使用
     */
    private Integer status;

    /**
     * 角色：ADMIN-管理员，USER-普通用户
     * 
     * 用于区分用户的角色和权限
     * ADMIN表示管理员，拥有更高的权限
     * USER表示普通用户，拥有基本权限
     */
    private String role;

    /**
     * 创建时间
     * 
     * 记录用户账户的创建时间
     * 使用LocalDateTime类型，是Java 8引入的新时间API
     * 相比Date类型更加易用和直观
     */
    private LocalDateTime createTime;

    /**
     * 最后登录时间
     * 
     * 记录用户最后一次登录的时间
     * 用于统计用户活跃度、安全监控等
     */
    private LocalDateTime lastLoginTime;
}